/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufms.facom.chatsocket.domain;

import br.ufms.facom.chatsocket.exception.ParametroInvalidoException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.validator.EmailValidator;

/**
 *
 * @author jairorodrigues
 */
public class Usuario implements java.io.Serializable
{    
    private String nome;
    private String telefone;
    private String endereco;
    private String email;
    private String nomeDeUsuario;
    private String senha;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) throws ParametroInvalidoException
    {
        if (email == null || !EmailValidator.getInstance().isValid(email))
            throw new ParametroInvalidoException("Email inválido!");
        
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) throws ParametroInvalidoException {
        
        if (nome == null)
            throw new ParametroInvalidoException("Nome não pode ser vazio!");
            
        if (StringUtils.isAlphaSpace(nome) || nome.length() < 3)
            throw new ParametroInvalidoException("Nome de usuário inválido! Apenas letras e espaços!");
        
        this.nome = nome;
    }

    public String getNomeDeUsuario() {
        return nomeDeUsuario;
    }

    public void setNomeDeUsuario(String nomeDeUsuario) throws ParametroInvalidoException
    {
        if (nomeDeUsuario == null || StringUtils.isAlphanumeric(nomeDeUsuario) || nomeDeUsuario.length() < 3)
            throw new ParametroInvalidoException("Nome de usuário inválido! Deve conter apenas letras e números e ter mais de três digitos!");

        this.nomeDeUsuario = nomeDeUsuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) throws ParametroInvalidoException
    {
        if (senha == null || StringUtils.isAlphanumeric(senha) ||  senha.length() < 3)
            throw new ParametroInvalidoException("Senha inválida! Deve conter apenas letras e números e ter mais de três digitos!");

        this.senha = senha;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    @Override
    public boolean equals (Object obj)
    {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if ((this.nomeDeUsuario == null) ? (other.nomeDeUsuario != null) : !this.nomeDeUsuario.equals(other.nomeDeUsuario)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode ()
    {
        int hash = 7;
        hash = 31 * hash + (this.nomeDeUsuario != null ? this.nomeDeUsuario.hashCode() : 0);
        return hash;
    }
}
